
import store from './store';

export function setupCache(app) {
  app.mixin({
    beforeRouteLeave: function (to, from, next) {
      if (this.$route.meta.keepAlive === true) {
        const result = this.$route.meta.keepAlive === true && store.state.tags.tagList.some((ele) => {
          return ele.value === this.$route.fullPath;
        });
        if (this.$vnode && !result) {
          if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache) {
            if (this.$vnode.componentOptions) {
              let key = this.$vnode.key == null
                ? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '')
                : this.$vnode.key;
              let cache = this.$vnode.parent.componentInstance.cache;
              let keys = this.$vnode.parent.componentInstance.keys;
              if (cache[key]) {
                if (keys.length) {
                  let index = keys.indexOf(key);
                  if (index > -1) {
                    keys.splice(index, 1);
                  }
                }
                delete cache[key];
              }
            }
          }
        }
      }
      next();
    },
  });
}
